﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////

#pragma once

#include "CollaborationCacheInterface.h"

namespace gcmp
{
    class IDocument;

    /// \brief ElementRelationshipsVersionManager工具类
    class COLLABORATION_CACHE_INTERFACE_EXPORT ElementRelationshipsVersionUtils final
    {
    public:
        /// \brief 根据ElementId从缓存中获取Element强弱依赖的版本号
        ///
        /// ElementId不在缓存中，返回std::vector<std::pair<ElementId,Int32>>()
        ///
        /// \param pDocment 文档指针
        /// \param elementId 需要获取版本的ElementId
        /// \param elementRelationshipsVersion 对应Element的强弱依赖的版本号
        /// \return void
        static void GetElementRelationshipsVersion(const IDocument* pDocument, const ElementId& elementId, std::vector<std::pair<Int64, Int32>>& elementRelationshipsVersion);

        /// \brief 向缓存中设置Element强弱依赖的版本号
        ///
        /// 不存在添加，存在用新值覆盖
        ///
        /// \param pDocment 文档指针
        /// \param elementId 需要设置版本的ElementId
        /// \param elementRelationshipsVersion 对应Element的强弱依赖的版本号
        /// \return void
        static void SetElementRelationshipsVersion(IDocument* pDocument, const ElementId& elementId, const std::vector<std::pair<Int64, Int32>>& elementRelationshipsVersion);

        /// \brief 更新缓存中Element版本号
        ///
        /// \param pDocment 文档指针
        /// \param elementVersions 需要更新的构件及版本
        /// \return void
        static void UpdateElementRelationshipsVersion(IDocument* pDocument, const std::unordered_map<Int64, Int32>& elementVersions);
    };
}


